package controllers

import (
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	"io/ioutil"
	"strconv"
	"xiegao/common"
	"xiegao/models"
)

type ShopController struct {
	beego.Controller
}

// @Title 获取商店列表
// @Description 获取全部商店列表
// @Success 200 {object} models.shop.Shop
// @Param   page     query   int false       "当前页"
// @Param   limit    query   int false       "提取条数"
// @Param   name    query   string false       "商店名"
// @Failure 500 服务器异常
// @router /shop [get]
func (self *ShopController) List() {
	o := orm.NewOrm()
	var data []models.Shop
	name := self.Input().Get("name")
	addr := self.Input().Get("addr")
	phone := self.Input().Get("phone")
	number, error := o.QueryTable("shop").Filter(
		"name__icontains", name,
	).Filter("addr__icontains", addr).Filter("phone__icontains", phone).All(&data)
	if error != nil {
		fmt.Println(error)
		self.Data["json"] = map[string]interface{}{
			"code": 200,
			"msg":  "获取失败服务器繁忙",
		}
		self.ServeJSON()
		self.StopRun()
	}
	self.Data["json"] = map[string]interface{}{
		"code": 200,
		"msg":  "获取成功",
		"data": data,
		"page": number,
	}
	self.ServeJSON()
}

// @Title 新建一个Shop
// @description 新建一个SHOP
// @Success 200 {"code":200,"msg":"新建成功"}
// @Param Name body string true 商店名称
// @Param Longitude body string true 经度
// @Param Latitude body string true 纬度
// @Param Desc body string true 描述富文本
// @Param Image body string true 商店封面
// @Param Addr body string true 地址
// @Param Phone body string true 电话
// @Failure 200 {"code":500,"msg":"新建失败"}
// @router /shop [post]
func (self *ShopController) Create() {

	tempBody, error := ioutil.ReadAll(self.Ctx.Request.Body)
	if error != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 500,
			"msg":  "服务器繁忙",
		}
		self.ServeJSON()
		self.StopRun()
	}
	body := common.DecodeJson(tempBody)
	var shop = &models.Shop{
		Name:      body["Name"].(string),
		Longitude: body["Longitude"].(string),
		Latitude:  body["Latitude"].(string),
		Desc:      body["Desc"].(string),
		Image:     body["Image"].(string),
		Addr:      body["Addr"].(string),
		Phone:     body["Phone"].(string),
	}
	o := orm.NewOrm()
	_, InsertError := o.Insert(shop)
	if InsertError == nil {
		self.Data["json"] = map[string]interface{}{
			"code": 200,
			"msg":  "新建成功",
		}
		self.ServeJSON()
		self.StopRun()
	}
	self.Data["json"] = map[string]interface{}{
		"code": 500,
		"msg":  InsertError.Error(),
	}
	self.ServeJSON()
	self.StopRun()
}

// @Title 获取一个shop
// @description 获取一个shop
// @Success 200 {object} models.shop.Shop
// @Param id path string true 商店id
// @Failure 200 {"code":404,"msg":"资源未找到"}
// @router /shop [post]
// @router /shop/:id [get]
func (self *ShopController) GetOne() {
	params := self.Ctx.Input.Params()
	id, error := strconv.Atoi(params[":id"])
	if error != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 500,
			"msg":  error.Error(),
		}
		self.ServeJSON()
		self.StopRun()
	}
	shop := models.Shop{Id: id}
	o := orm.NewOrm()
	result := o.Read(&shop)
	if result != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 404,
			"msg":  result.Error(),
		}
		self.ServeJSON()
		self.StopRun()
	}
	self.Data["json"] = map[string]interface{}{
		"code": 200,
		"msg":  "获取成功",
		"data": shop,
	}
	self.ServeJSON()
	self.StopRun()
}

// @Title 新建一个Shop
// @description 新建一个SHOP
// @Success 200 {"code":200,"msg":"新建成功"}
// @Param id path string true 商店id
// @Param Name body string true 商店名称
// @Param Longitude body string true 经度
// @Param Latitude body string true 纬度
// @Param Desc body string true 描述富文本
// @Param Image body string true 商店封面
// @Param Addr body string true 地址
// @Param Phone body string true 电话
// @Failure 200 {"code":500,"msg":"新建失败"}
// @router /shop/:id [post]
func (self *ShopController) UpdateOne() {
	tempBody, error := ioutil.ReadAll(self.Ctx.Request.Body)
	if error != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 500,
			"msg":  "服务器繁忙",
		}
		self.ServeJSON()
		self.StopRun()
	}
	body := common.DecodeJson(tempBody)
	params := self.Ctx.Input.Params()
	id, _ := strconv.Atoi(params[":id"])
	var shop = &models.Shop{
		Id:        id,
		Name:      body["Name"].(string),
		Longitude: body["Longitude"].(string),
		Latitude:  body["Latitude"].(string),
		Desc:      body["Desc"].(string),
		Image:     body["Image"].(string),
		Addr:      body["Addr"].(string),
		Phone:     body["Phone"].(string),
	}
	o := orm.NewOrm()
	_, updateError := o.Update(shop)
	if updateError != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 500,
			"msg":  updateError.Error(),
		}

		self.ServeJSON()
		self.StopRun()
	}
	self.Data["json"] = map[string]interface{}{
		"code": 200,
		"msg":  "修改成功",
		"data": shop,
	}
	self.ServeJSON()

}

// @Title 删除一个shop
// @description 删除一个shop
// @Success 200 {"code":200,"msg":"删除成功"}
// @Param id path string true 商店id
// @Failure 200 {"code":404,"msg":"资源未找到"}
// @router /shop/:id [delete]
func (self *ShopController) DeleteOne() {
	params := self.Ctx.Input.Params()
	id, error := strconv.Atoi(params[":id"])
	if error != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 500,
			"msg":  error.Error(),
		}
		self.ServeJSON()
		self.StopRun()
	}
	shop := models.Shop{Id: id}
	o := orm.NewOrm()
	result := o.Read(&shop)
	if result != nil {
		self.Data["json"] = map[string]interface{}{
			"code": 404,
			"msg":  result.Error(),
		}
		self.ServeJSON()
		self.StopRun()
	}
	_, deleteError := o.Delete(&shop)
	if deleteError == nil {
		self.Data["json"] = map[string]interface{}{
			"code": 200,
			"msg":  "删除成功",
		}
		self.ServeJSON()
		self.StopRun()
	}
	self.Data["json"] = map[string]interface{}{
		"code": 500,
		"msg":  deleteError.Error(),
	}
	self.ServeJSON()
	self.StopRun()
}
